package listbyorder.access201_300.test287;

/**
 * @author code_yc
 * @version 1.0
 * @date 2020/6/28 14:11
 */
// 位运算
public class Solution2 {

    public int findDuplicate(int[] nums) {
        int res = 0;
        int n = nums.length;
        //统计每一列 1 的个数
        for (int i = 0; i < 32; i++) {
            int a = 0;
            int b = 0;
            int mask = (1 << i);
            // 遍历整个数组，统计当前位置上面1元素的个数
            for (int j = 0; j < n; j++) {
                //统计原数组当前列 1 的个数
                if ((nums[j] & mask) > 0) {
                    a++;
                }
                //统计 1 到 n 序列中当前列 1 的个数
                if ((j & mask) > 0) {
                    b++;
                }
            }
            if (a > b) {
                res = res | mask;
            }
        }
        return res;
    }
}
